package com.code.time1124;

import java.util.Arrays;

public class StringTest {

	public static void main(String[] args) {
		
		String str = new String("");//无参构造创建
		String str2 = "";//常量创建
		System.out.println(str2.equals(str));//true

		str = "富民速八.avi;波波老师和富民的故事.avi";
		System.out.println(str);
		
		char[] c = {'a','b','c','d'};
		System.out.println(Arrays.toString(c));
		System.out.println(c);//abcd,这里直接打印字符串
		
		
		//常用方法：
		//1.char charAt(int index) 返回 char指定索引处的值。 
		str = "abcdefg";
		char charAt = str.charAt(0);
		System.out.println(charAt);
		
		//2.String concat(String str) 将指定的字符串连接到该字符串的末尾。 相当于：+
		String concat = str.concat("土豪的日子我们不懂");
		System.out.println("原来的字符串不变：" + str);
		System.out.println("拼接后的字符串："+concat);
		
		//3.boolean contains(CharSequence s) 判断当前对象是否包含连续的CharSequence（String、StringBuffer、StringBuilder）串
		boolean contains = str.contains("abc");//判断当前对象str是否包含连续的参数abc
		System.out.println(contains);
		
		//4.boolean endsWith(String suffix) 判断当前字符串是否以指定的后缀suffix结尾。  
		//5.boolean startsWith(String prefix) 判断当前字符串是否以指定的前缀prefix开头。  
		str = "富民速八.avi";
		boolean endsWith = str.endsWith(".avi");
		System.out.println(endsWith);
		
		boolean startWith = str.startsWith(".avi");
		System.out.println(startWith);
		
		
		//6.byte[] getBytes()  编码：将字符串对象按照默认字符集转换为字节数组
		//7.byte[] getBytes(String charsetName)   编码：将字符串对象按照指定字符集转换为字节数组
		byte[] bytes = str.getBytes();
		System.out.println(Arrays.toString(bytes));
		
		//8.void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin) 将此字符串中的字符复制到目标字符数组中。  (含头不含尾)[srcBegin,srcEnd)
		str = "abcdabefg";
		char[] dst = new char[10];
		str.getChars(1,7,dst, 2);
		System.out.println(dst);
		
		//9.int indexOf(String s) 返回s第一次在当前对象str中出现的索引 ，-1表示没有找到（注意：这里s必须也是匹配连续的字符串）
		int indexOf = str.indexOf("ab");
		System.out.println(indexOf);
		
		//10.int indexOf(String s, int fromIndex) 返回s在当前对象指定下标fromIndex后第一次出现的索引  (str是作为一个整体匹配下标的)
		int indexOf2 = str.indexOf("ab",3);
		System.out.println(indexOf2);
		
		//11.int lastIndexOf(String str) 返回指定子字符串最后一次出现的字符串中的索引。  
		//12.int lastIndexOf(String str, int fromIndex) 返回指定子字符串的最后一次出现的字符串中的索引，从指定索引开始向前搜索。  
		str = "abcdabefg";
		int lastIndexOf = str.lastIndexOf("ab");
		System.out.println(lastIndexOf);
		
		//13.boolean isEmpty() 当 length()为 0时，返回 true 。  
		str = "";
		boolean empty = str.isEmpty();
		System.out.println("是否为空：" + empty);
		
		//14.int length() 返回此字符串的长度。  
		int length = str.length();
		System.out.println(length);
		
		//15.boolean matches(String regex)  判断当前字符串对象是否匹配给定的正则表达式regex，通常用来进行权限限制，字符格式限制   	一般用了做校验：如，用户名和密码的合法性
		str = "abcdAB";
		String regex = "[a-zA-Z]+";//匹配a-z或者A-Z之间任意多个字符
		boolean matches = str.matches(regex);
		System.out.println(matches);
		
		//16.String replace(CharSequence target, CharSequence replacement)   将当前字符串中的target替换为replacement,通常用来和谐用语
		str = "你是DSB，就是个DSB";//WQNMLGB/DSB/CNM：和谐用语
		String replace = str.replace("DSB", "***");
		System.out.println(replace);
		System.out.println(str);
		
		//17.String replaceAll(String regex, String replacement) regex是正则表达式，将当前字符串中的regex全部替换为replacement  
		str = "你是DSB，就是个DSB";
		regex = "DSB";
		String replaceAll = str.replaceAll(regex, "***");
		System.out.println(replaceAll);
		
		//18.String replaceFirst(String regex, String replacement)  将当前字符串中的第一个regex替换为replacement 
		
		System.out.println("=====================");
		str = "富民速八.avi";
		String replace2 = str.replace(".","#");
		System.out.println("replace:" + replace2);
		
		String replaceAll2 = str.replaceAll(".","#");//在正则表达式中,.表示匹配任意一个字符
		System.out.println("replaceAll:" + replaceAll2);
		
		System.out.println("====================");
		//19.String[] split(String regex)  将当前字符串对象按照给定的正则表达式regex分割为String[]
		str = "bobo如家.avi;富民优衣库高清版.mp4;鹰鹰Xxx热.avi;如何让富婆3天之内爱上你手册.doc;";
		//请将字符串中所有的AVI文件打印出来
		String[] split = str.split("\\.");
		System.out.println(Arrays.toString(split));
		for (String s : split) {//s是每一次数组中的元素
			if (s.endsWith(".avi")) {
				System.out.println(s);
			}
		}
		
		//20.CharSequence subSequence(int beginIndex, int endIndex)  从当前字符串中beginIndex和endIndex之间截取子串（含头不含尾）
		str = "abcdefg";
		CharSequence subSequence = str.subSequence(2,5);
		System.out.println(subSequence);
		
		//21.String substring(int beginIndex)   从当前字符串中截取beginIndex到最后的子串
		//22.String substring(int beginIndex, int endIndex)  从当前字符串中beginIndex和endIndex之间截取子串（含头不含尾）
		
		//23.char[] toCharArray() 将此字符串转换为新的字符数组。  方便遍历当前所有的字符
		char[] charArray = str.toCharArray();
		for (char d : charArray) {
			System.out.println(d);
		}
		
		//24.String toUpperCase() 将此字符转换为全大写	一般用于验证码
		System.out.println("abc".toUpperCase());
		//25.String toLowerCase() 将此字符转换为全小写	一般用于验证码
		System.out.println("ABC".toLowerCase());
		
		//26.String trim() 将当前字符串对象中字符前面和后面的空格去除	用了避免用户的一些不当输入
		str = "		abc	asdfa			sda				";
		String trim = str.trim();
		System.out.println(trim);
		
		//27.static String valueOf(Object obj) 将其他类型转换为String对象
		String valueOf = String.valueOf(1);//这里其实是1的包装类Integer
		System.out.println(valueOf);

	}

}
